package com.uaijug.dengue.core;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;

import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyFactory;

@PersistenceCapable
public class Foco implements BaseBean<com.uaijug.dengue.entidade.Foco> {

	private static final long serialVersionUID = 2557587874050757185L;
	
	@PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
	private Key key;
	@Persistent
	private Long latitude;
	@Persistent
	private Long longitude;
	@Persistent(mappedBy = "foco")
	private List<Foto> fotos;
	@Persistent
	private Usuario notificador;
	@Persistent
	private String detalhe;
	@Persistent
	private Resolucao resolucao;
	@Persistent
	private Date dataCriacao;

	
	public Long getLatitude() {
		return latitude;
	}

	public void setLatitude(Long latitude) {
		this.latitude = latitude;
	}

	public Long getLongitude() {
		return longitude;
	}

	public void setLongitude(Long longitude) {
		this.longitude = longitude;
	}

	public Usuario getNotificador() {
		return notificador;
	}

	public void setNotificador(Usuario notificador) {
		this.notificador = notificador;
	}


	public String getDetalhe() {
		return detalhe;
	}

	public void setDetalhe(String detalhe) {
		this.detalhe = detalhe;
	}

	public List<Foto> getFotos() {
		return fotos;
	}

	public void setFotos(List<Foto> fotos) {
		this.fotos = fotos;
	}

	public Resolucao getResolucao() {
		return resolucao;
	}

	public void setResolucao(Resolucao resolucao) {
		this.resolucao = resolucao;
	}
	
	public Date getDataCriacao() {
		return dataCriacao;
	}

	public void setDataCriacao(Date dataCriacao) {
		this.dataCriacao = dataCriacao;
	}

	public com.uaijug.dengue.entidade.Foco convertToDTO() {
		com.uaijug.dengue.entidade.Foco foco = new com.uaijug.dengue.entidade.Foco();
		foco.setId(getKey() != null ? getKey().getId() : null);
		foco.setDetalhe(getDetalhe());
		foco.setLatitude(getLatitude());
		foco.setLongitude(getLongitude());
		foco.setNotificador(getNotificador() != null ? getNotificador().convertToDTO() : null);
		foco.setResolucao(getResolucao() != null ? getResolucao().convertToDTO() : null);
		if (getFotos() != null && !getFotos().isEmpty()) {
			foco.setFotos(new ArrayList<com.uaijug.dengue.entidade.Foto>());
			for (Foto foto : getFotos()) {
				foco.getFotos().add(foto.convertToDTO());
			}
		}
		return foco;
	}
	
	@Override
	public void convertToBean(com.uaijug.dengue.entidade.Foco objet) {
		if (objet != null) {
			if (objet.getId() != null) {
				setKey(KeyFactory.createKey(Foco.class.getSimpleName(), objet.getId()));
			}
			if (objet.getNotificador() != null) {
				this.notificador = new Usuario();
				this.notificador.convertToBean(objet.getNotificador());
			}
			if (objet.getResolucao() != null) {
				this.resolucao = new Resolucao();
				resolucao.convertToBean(objet.getResolucao());
			}
			if (objet.getFotos() != null && !objet.getFotos().isEmpty()) {
				this.fotos = new ArrayList<Foto>();
				for (com.uaijug.dengue.entidade.Foto fotoDTO : objet.getFotos()) {
					Foto fotoBean = new Foto();
					fotoBean.convertToBean(fotoDTO);
					fotos.add(fotoBean);
				}
			}
			this.detalhe = objet.getDetalhe();
			this.latitude = objet.getLatitude();
			this.longitude = objet.getLatitude();
		}
	}

	@Override
	public Key getKey() {
		return key;
	}

	@Override
	public void setKey(Key key) {
		this.key = key;
	}
}
